package com.zyf.project.binaryproto.converter;

import utils.binary.impl.BytesSlice;

/**
 * <h1>静态值转换器</h1>
 * <p>继承于 {@link ValueConverter}，另外提供了 {@link #encode(Object, byte[], int)} 和 {@link #decode(BytesSlice)} 两种方法</p>
 * <p>所谓的静态，就是指参数是不可变长的</p>
 *
 * @author Zhou Yifan
 */
public interface FixedValueConverter extends ValueConverter {

    /**
     * 将把固定长度的值序列化到指定的缓冲区
     * <p>
     * 注：实现者应用确保写入的范围不要越界
     *
     * @param value  要序列化的值
     * @param buffer 保存结果的缓冲区
     * @param offset 缓冲区的写入起始位置
     * @return 返回写入的长度
     */
    int encode(Object value, byte[] buffer, int offset);

    /**
     * 数据片解码
     *
     * @param dataSlice 数据片
     * @return 解码后的对象
     */
    Object decode(BytesSlice dataSlice);

}
